﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using FONCREAGROINTEGRAL.Models;

namespace FONCREAGROINTEGRAL.Controllers
{
    public class ventasemovienteController : Controller
    {
        public SistIntFoncreagroEntities entidades = new SistIntFoncreagroEntities();

        //
        // GET: /ventasemoviente/

        public ActionResult IndexById(int id)
        {

            var query = entidades.VENTAs.Where(v => v.IdVenta == id);

            var result = (from v in query.ToList()
                          join td in entidades.TIPODOCUMENTOes on v.IdTipoDocumento equals td.IdTipoDocumento
                          join py in entidades.PROYECTOes on v.IdProyecto equals py.IdProyecto
                          join pc in entidades.PROVEEDORCLIENTEs on v.IdProveedorCliente equals pc.IdProveedorCliente

                          join bn in entidades.BANCOes on v.IdBanco equals bn.IdBanco into lbn
                          from x in lbn.DefaultIfEmpty()

                          select new
                          {
                              IdVenta = v.IdVenta,
                              IdTipoDocumento = v.IdTipoDocumento,
                              NomTipoDocumento = td.Nombre,
                              FechaDocumento = string.Format("{0:d}", v.FechaDocumento),
                              NroSerie = v.NroSerie,
                              NroDocumento = v.NroDocumento,
                              Proyecto = py.Nombre,
                              IdProyecto = py.IdProyecto,
                              RazonSocial = pc.RazonSocial,
                              IdProveedorCliente = v.IdProveedorCliente,
                              TipoPago = v.TipoPago,
                              Estado = v.Estado,
                              NroVoucher = v.NroVoucher,
                              FlagVentaAnimales = v.FlagVentaAnimales,
                              Transferencia =v.Transferencia,
                              NroNotaInterna = v.NroNotaInterna,
                              Modalidad = v.Modalidad,
                              NomBanco = (x == null ? String.Empty : x.Nombre),
                              IdBanco = v.IdBanco

                          }).ToList();

            return Json(new { grid = result, total = query.Count() }, JsonRequestBehavior.AllowGet);
        }
        
        //
        // GET: /ventasemoviente/

        public ActionResult Index()
        {
            int start = Convert.ToInt32(Request.QueryString["start"]);
            int limit = Convert.ToInt32(Request.QueryString["limit"]);

            var query = entidades.VENTAs.Where(v => v.IdTipoVenta == 3);

            var result = (from v in query.OrderByDescending(v => v.IdVenta).Skip(start).Take(limit).ToList() 
                          join td in entidades.TIPODOCUMENTOes on v.IdTipoDocumento equals td.IdTipoDocumento
                          join py in entidades.PROYECTOes on v.IdProyecto equals py.IdProyecto
                          join pc in entidades.PROVEEDORCLIENTEs on v.IdProveedorCliente equals pc.IdProveedorCliente

                          join bn in entidades.BANCOes on v.IdBanco equals bn.IdBanco into lbn
                          from x in lbn.DefaultIfEmpty()

                          select new {
                              IdVenta = v.IdVenta,
                              IdTipoDocumento = v.IdTipoDocumento,
                              NomTipoDocumento = td.Nombre,
                              FechaDocumento = string.Format("{0:d}", v.FechaDocumento),
                              NroSerie = v.NroSerie,
                              NroDocumento = v.NroDocumento,
                              Proyecto = py.Codigo+" "+py.Nombre,
                              IdProyecto = py.IdProyecto,
                              RazonSocial = pc.RazonSocial,
                              IdProveedorCliente = v.IdProveedorCliente,
                              TipoPago = v.TipoPago,
                              Estado = v.Estado,
                              NroNotaInterna = v.NroNotaInterna,
                              Modalidad = v.Modalidad,
                              NomBanco = (x == null ? String.Empty : x.Nombre),
                              IdBanco = v.IdBanco

                          }).ToList();

            return Json(new { grid = result, total = query.Count()},JsonRequestBehavior.AllowGet);
        }

        //
        // GET: /ventasemoviente/Details/5

        public ActionResult Details(int id)
        {
            return View();
        }

        //
        // GET: /ventasemoviente/Create

        //public ActionResult Create()
        //{
        //    return View();
        //} 

        //
        // POST: /ventasemoviente/Create

        [HttpPost]
        public ActionResult Create(FormCollection collection)
        {
            string strResponse = String.Empty;
            try
            {
                // TODO: Add insert logic here
                string Flag = Convert.ToString(Request.Form["FlagVentaAnimales"]);
                int IdProyectoCPD = Convert.ToInt32(Request.Form["IdProyectoCPD"]);
                DateTime FechaDocumento = Convert.ToDateTime(Request.Form["FechaDocumento"]);
                Decimal ValorIgv = 0;

                string AfectoIgv = "S";

                if (Flag == "P") {
                    AfectoIgv = "N";
                }

                try
                {
                    var ss = entidades.PARAMETROS.Single(p => p.Nombre == "IGV" && p.Estado == true);
                    ValorIgv = Convert.ToDecimal(ss.Valor);
                }
                catch { 
                    
                }

                var cVentaSemoviente = new VENTA();
                TryUpdateModel(cVentaSemoviente, collection.ToValueProvider());
                cVentaSemoviente.AfectoIGV = AfectoIgv;
                cVentaSemoviente.ValorIGV = ValorIgv;
                cVentaSemoviente.IdProyecto = IdProyectoCPD;
                ///cVentaSemoviente.ti
                entidades.AddToVENTAs(cVentaSemoviente);
                entidades.SaveChanges();

                strResponse = "{success: true,msg:'Registro Creado Correctamente'}";
                return Content(strResponse);
            }
            catch //(Exception e)
            {
                strResponse = "{success: false,msg:'Fallo en la Creación'}";
                return Content(strResponse); ;
            }
        }
        
        //
        // GET: /ventasemoviente/Edit/5
 
        //public ActionResult Edit(int id)
        //{
        //    return View();
        //}

        //
        // POST: /ventasemoviente/Edit/5

        [HttpPost]
        public ActionResult Edit(int id, FormCollection collection)
        {
            string strResponse = String.Empty;
            try
            {
                var eVenraSemo = entidades.VENTAs.Single(v => v.IdVenta == id);

                // TODO: Add update logic here
                string Flag = Convert.ToString(Request.Form["FlagVentaAnimales"]);
                int IdProyectoCPD = Convert.ToInt32(Request.Form["IdProyectoCPD"]);
                //DateTime FechaDocumento = Convert.ToDateTime(Request.Form["FechaDocumento"]);
                //Decimal ValorIgv = 0;

                string AfectoIgv = "S";

                if (Flag == "P")
                {
                    AfectoIgv = "N";
                }

                TryUpdateModel(eVenraSemo);
                eVenraSemo.IdProyecto = IdProyectoCPD;
                eVenraSemo.AfectoIGV = AfectoIgv;
                entidades.SaveChanges();

                strResponse = "{success: true,msg:'Registro Creado Correctamente'}";
                return Content(strResponse);
            }
            catch
            {
                strResponse = "{success: false,msg:'Fallo en la Creación'}";
                return Content(strResponse);
            }
        }

        //
        // GET: /ventasemoviente/Delete/5
 
        public ActionResult Delete(int id)
        {
            return View();
        }

        //
        // POST: /ventasemoviente/Delete/5

        [HttpPost]
        public ActionResult Delete(int id, FormCollection collection)
        {
            try
            {
                // TODO: Add delete logic here
 
                return RedirectToAction("Index");
            }
            catch
            {
                return View();
            }
        }
    }
}
